package D3;

import java.util.Arrays;
import java.util.Comparator;

public class Java02 {
    public static void main(String[] args) {
        //操作对象数组
        Student[] students = new Student[4];
        students[0] = new Student("蜘蛛精", 169.5, 23);
        students[1] = new Student("紫霞", 163.8, 26);
        students[2] = new Student("紫霞", 163.8, 26);
        students[3] = new Student("至尊宝", 167.5, 24);
//        Arrays.sort(students);
//        System.out.println(Arrays.toString(students));
        //排序方式二：可以传递一个比较器对象，sort方法底层会判断谁打谁小
        //参数一：需要排序的数组
        //参数二：比较器对象，用来制定对象的比较规则
//        Arrays.sort(students, new Comparator<Student>() {
//            @Override
//            public int compare(Student o1, Student o2) {
//                return Double.compare(o1.getHeight(),o2.getHeight());//升序排序，降序则反之
//
//            }
//        });
        //lambda表达式的写法
        Arrays.sort(students, (o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()));
        //静态方法引用：类名：：方法名.可以改写为下面的样子，实际上就是用类名调用方法，但是把参数给省略了，这就是静态方法引用
        //Arrays.sort(students, CompareByData::compare);
        CompareByData compare = new CompareByData();
        Arrays.sort(students,(o1,o2) -> compare.compareable(o1,o2));
        //特定类型的方法引用，Java约定：如果某个lambda中只是调用一个实例方法，并且前面参数列表只是调用一个实例方法，并且前面参数列表中的第一参数作为方法的主调，后面所有的参数都是作为该实例方法的入参是，就可以使用特定的类型方法引用
        System.out.println(Arrays.toString(students));
    }}
